TypeScript 基础

1. 什么是 TypeScript?

TypeScript 是 JavaScript 的一个超集,它添加了可选的静态类型和基于类的面向对象编程。TypeScript 代码最终会被编译成普通的 JavaScript 代码,因此它可以在任何支持 JavaScript 的环境中运行。

1.1 为什么选择 TypeScript?

  • 静态类型检查:TypeScript 可以在编译时检查类型错误,减少运行时错误。
  • 更好的代码提示:IDE 可以提供更好的代码补全和错误提示。
  • 面向对象编程:TypeScript 支持类、接口、泛型等面向对象的特性。

2. 安装 TypeScript

首先,你需要安装 TypeScript。你可以通过 npm 来安装:

npm install -g typescript

安装完成后,你可以使用 tsc 命令来编译 TypeScript 文件。

3. 编写第一个 TypeScript 程序

创建一个名为 hello.ts 的文件,并编写以下代码:

function greet(name: string) {
  return `Hello, ${name}!`;
}

console.log(greet("TypeScript"));

3.1 编译 TypeScript 文件

在终端中运行以下命令来编译 hello.ts 文件:

tsc hello.ts

编译完成后,会生成一个 hello.js 文件,内容如下:

function greet(name) {
  return "Hello, " + name + "!";
}
console.log(greet("TypeScript"));

3.2 运行 JavaScript 文件

你可以使用 Node.js 来运行生成的 JavaScript 文件:

node hello.js

输出结果将是:

Hello, TypeScript!

4. 基本类型

TypeScript 支持 JavaScript 的所有基本类型,并且添加了一些额外的类型。

4.1 基本类型

  • string:字符串类型
  • number:数字类型
  • boolean:布尔类型
  • any:任意类型
  • void:表示没有返回值

4.2 示例代码

let name: string = "Alice";
let age: number = 30;
let isStudent: boolean = true;
let anything: any = "可以是任何类型";

function logMessage(): void {
  console.log("This function returns nothing.");
}

5. 数组和元组

5.1 数组

TypeScript 中的数组可以存储相同类型的多个值。

let numbers: number[] = [1, 2, 3, 4, 5];
let names: string[] = ["Alice", "Bob", "Charlie"];

5.2 元组

元组允许你定义一个固定长度的数组,其中每个元素可以是不同的类型。

let person: [string, number] = ["Alice", 30];

6. 接口和类型别名

6.1 接口

接口用于定义对象的结构。

interface Person {
  name: string;
  age: number;
}

function greetPerson(person: Person) {
  console.log(`Hello, ${person.name}! You are ${person.age} years old.`);
}

let alice: Person = { name: "Alice", age: 30 };
greetPerson(alice);

6.2 类型别名

类型别名允许你为类型创建一个别名。

type Name = string;
type Age = number;

let myName: Name = "Alice";
let myAge: Age = 30;

7. 类

TypeScript 支持面向对象编程,你可以使用类来创建对象。

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  makeSound() {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  makeSound() {
    console.log(`${this.name} barks.`);
  }
}

let dog = new Dog("Buddy");
dog.makeSound(); // 输出: Buddy barks.

8. 泛型

泛型允许你编写可以处理多种类型的代码。

function identity<T>(arg: T): T {
  return arg;
}

let output1 = identity<string>("Hello");
let output2 = identity<number>(42);

9. 实践练习

9.1 练习:创建一个简单的 Todo 应用

  1. 创建一个 Todo 接口,包含 id、text 和 completed 属性。
  2. 创建一个 TodoList 类,包含 todos 数组和 addTodo、removeTodo、completeTodo 方法。
  3. 编写代码来测试 TodoList 类。

9.2 示例代码

interface Todo {
  id: number;
  text: string;
  completed: boolean;
}

class TodoList {
  todos: Todo[] = [];

  addTodo(text: string) {
    const newTodo: Todo = {
      id: this.todos.length + 1,
      text,
      completed: false,
    };
    this.todos.push(newTodo);
  }

  removeTodo(id: number) {
    this.todos = this.todos.filter((todo) => todo.id !== id);
  }

  completeTodo(id: number) {
    const todo = this.todos.find((todo) => todo.id === id);
    if (todo) {
      todo.completed = true;
    }
  }
}

const todoList = new TodoList();
todoList.addTodo("Learn TypeScript");
todoList.addTodo("Build a Todo App");
todoList.completeTodo(1);
console.log(todoList.todos);

10. 总结

通过本教程,你已经学习了 TypeScript 的基础知识,包括类型系统、接口、类、泛型等。TypeScript 可以帮助你编写更健壮、更易于维护的代码。继续探索 TypeScript 的高级特性,如装饰器、模块、命名空间等,以进一步提升你的编程技能。

11. 下一步

  • 学习如何在 React 项目中使用 TypeScript。
  • 探索 TypeScript 的高级特性,如装饰器、模块、命名空间等。
  • 实践编写更复杂的 TypeScript 应用,如电商网站、社交媒体应用等。

希望这篇教程能帮助你快速入门 TypeScript,并在实际项目中应用它!